package Gather.StreamExercise.MethodReference.MethodDome;

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;

/**
 * ClassName:MethodReference002
 * Package:Gather.StreamExercise.MethodReference
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/25-13:37
 * @Version:v1.0
 */
public class MethodReference002 {
    /**方法引用分类
     *
     * 1.引用静态方法
     *      格式：类名::静态方法  Integer::parseInt
     * 2.引用成员方法
     *      格式：对象::成员方法
     *      a.其他类：其他类对象::方法名
     *      b.本类：this::方法名(引用处不能是静态方法)LoginJFrame
     *      c.父类：super::方法名(引用处不能是静态方法)MyJFrame--LoginJFrame
     * 3.引用构造方法
     *      格式：类名::new
     *      范例：Student::new
     * 4.其他调用方式
     *      1.使用类名引用成员方法
     *      格式：String::substring
     *      2.引用数组的构造方法
     *      格式：数据类型[]::方法
     *      范例：int[]::new
     *      */
    public static void main(String[] args) {
        //引用静态方法
        //集合中有以下数字,要求把他们都变成int类型
        //"1","2","3","4","5"
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"1","2","3","4","5");
        ArrayList<Integer> newList = new ArrayList<>();
        //常规方式
        for (String s : list) {
            int i = Integer.parseInt(s);
            newList.add(i);
        }
        System.out.println(newList);


        list.stream().map(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                int i = Integer.parseInt(s);
                return i;
            }
        }).forEach(s-> System.out.println(s));

        //方法引用
        //1.方法已经存在
        //2.方法的形参跟返回值需要和抽象方法的形参与返回值保持一致
        //3.方法的功能需要把形参的字符串转换成整数
        list.stream().map(Integer::parseInt).forEach(s-> System.out.println(s));
    }
}
